home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / GFXFX2.ZIP / 3D_MDX1.PAS < prev    next >
Pascal/Delphi Source File  |  1995-02-14  |  3KB  |  106 lines

  1.  
  2. program mode_x_3d; { 3D_MDX1.PAS }
  3. { Mode-x version of polygoned object, by Bas van Gaalen & Sven van Heel }
  4. uses u_vga,u_mdx,u_pal,u_3d,u_kb;
  5.  
  6. {$define deca} { deca, cube, bar, tri }
  7.  
  8. const
  9. {$ifdef deca}
  10.   fpoly=6; { first poly to draw from }
  11.   nofpoints=12; { number of points }
  12.   nofplanes=10; { number of planes }
  13.   points:array[1..nofpoints,0..2] of integer=(
  14.     (-15,-15, 30),( 15,-15, 30),( 40,-40,  0),( 15,-15,-30),
  15.     (-15,-15,-30),(-40,-40,  0),(-15, 15, 30),( 15, 15, 30),
  16.     ( 40, 40,  0),( 15, 15,-30),(-15, 15,-30),(-40, 40,  0));
  17.   planes:array[1..nofplanes,0..3] of byte=(
  18.     (1,2,8,7),(2,3,9,8),(10,9,3,4),(11,10,4,5),(11,5,6,12),
  19.     (7,12,6,1),(1,2,3,6),(6,3,4,5),(7,8,9,12),(12,9,10,11));
  20. {$endif}
  21.  
  22. {$ifdef cube}
  23.   s=45;
  24.   fpoly=4;
  25.   nofpoints=8;
  26.   nofplanes=6;
  27.   points:array[1..nofpoints,0..2] of integer=(
  28.     (-s,-s,-s),(-s,-s, s),( s,-s, s),( s,-s,-s),
  29.     (-s, s,-s),(-s, s, s),( s, s, s),( s, s,-s));
  30.   planes:array[1..nofplanes,0..3] of byte=(
  31.     (1,5,6,2),(1,4,8,5),(1,2,3,4),(5,6,7,8),(8,7,3,4),(2,3,7,6));
  32. {$endif}
  33.  
  34. {$ifdef bar}
  35.   fpoly=3;
  36.   nofpoints=8;
  37.   nofplanes=6;
  38.   points:array[1..nofpoints,0..2] of integer=(
  39.     (-20,-40, 20),( 20,-40, 20),( 20,-40,-20),(-20,-40,-20),
  40.     (-20, 40, 20),( 20, 40, 20),( 20, 40,-20),(-20, 40,-20));
  41.   planes:array[1..nofplanes,0..3] of byte=(
  42.     (1,5,6,2),(1,4,8,5),(1,2,3,4),(5,6,7,8),(8,7,3,4),(2,3,7,6));
  43. {$endif}
  44.  
  45. {$ifdef tri}
  46.   fpoly=2;
  47.   nofpoints=8;
  48.   nofplanes=6;
  49.   points:array[1..nofpoints,0..2] of integer=(
  50.     (-50,-50,-20),(-10,-10, 20),( 10,-10, 20),( 50,-50,-20),
  51.     (-50, 50,-20),(-10, 10, 20),( 10, 10, 20),( 50, 50,-20));
  52.   planes:array[1..nofplanes,0..3] of byte=(
  53.     (1,5,6,2),(1,4,8,5),(1,2,3,4),(5,6,7,8),(8,7,3,4),(2,3,7,6));
  54. {$endif}
  55.  
  56. { -------------------------------------------------------------------------- }
  57.  
  58. procedure rotate_object;
  59. const xst=-1; yst=1; zst=-1;
  60. var
  61.   xp,yp,z:array[1..nofpoints] of integer;
  62.   x,y:integer;
  63.   n,phix,phiy,phiz:byte;
  64. begin
  65.   phix:=0; phiy:=0; phiz:=0;
  66.   fillchar(xp,sizeof(xp),0);
  67.   fillchar(yp,sizeof(yp),0);
  68.   fillchar(z,sizeof(z),0);
  69.   repeat
  70.     vretrace;
  71.     setborder(100);
  72.     for n:=1 to nofpoints do begin
  73.       x:=points[n,0]; y:=points[n,1]; z[n]:=points[n,2];
  74.       rotate(x,y,z[n],phix,phiy,phiz);
  75.       conv3dto2d(xp[n],yp[n],x,y,z[n]);
  76.     end;
  77.     for n:=1 to nofplanes do begin
  78.       polyz[n]:=z[planes[n,0]]+z[planes[n,1]]+z[planes[n,2]]+z[planes[n,3]];
  79.       pind[n]:=n;
  80.     end;
  81.     quicksort(nofplanes);
  82.     mdx_ofs:=16000-mdx_ofs;
  83.     mdx_setaddress(mdx_ofs);
  84.     mdx_cls;
  85.     for n:=fpoly to nofplanes do
  86.       mdx_polygon(xp[planes[pind[n],0]],yp[planes[pind[n],0]],
  87.                   xp[planes[pind[n],1]],yp[planes[pind[n],1]],
  88.                   xp[planes[pind[n],2]],yp[planes[pind[n],2]],
  89.                   xp[planes[pind[n],3]],yp[planes[pind[n],3]],
  90.                   160+ctab[phix],100-stab[phiy] div 2,polyz[n]+70);
  91.     inc(phix,xst); inc(phiy,yst); inc(phiz,zst);
  92.     setborder(0);
  93.   until keypressed;
  94. end;
  95.  
  96. { -------------------------------------------------------------------------- }
  97.  
  98. var i:byte;
  99. begin
  100.   mdx_setmodex(mdx_320x200,320);
  101.   {u_border:=true;}
  102.   for i:=1 to 255 do setrgb(i,i div 16,i div 8,i div 4);
  103.   rotate_object;
  104.   setvideo(u_lm);
  105. end.
  106.